package com.cry.demo;
import com.cry.demo.util.SqlGenerator;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import java.awt.*;
import java.io.File;
import java.io.IOException;
import java.util.List;

@SpringBootApplication
public class CryApplication {

    public static void main(String[] args) throws ClassNotFoundException, IOException {
        /**
         * 实例化sql生成工具类对象
         */
        SqlGenerator sqlGenerator = new SqlGenerator();
        /**
         * 实体类所在的package在磁盘上的绝对路径
         */
        String packageName = CryApplication.class.getResource("entity").getPath();
        /**
         * 存放生成sql的文件夹 与启动类同级
         */
        String filePath = CryApplication.class.getResource("").getPath();
        /**
         * 项目中实体类的路径 统一将实体类放置该目录下
         * 不得有多级文件夹，否则将无法正确读取
         */
        String prefix = "com.cry.demo.entity.";
        /**
         * 实体class文件名称
         */
        String className = "";
        /**
         * 存放最终生成的sql
         * 所有建表语句都在此sql内容中
         */
        StringBuffer sqls = new StringBuffer();
        sqls.append("/*========= 程镕宇版权所有 ==========*/");
        /**
         * 获取包下的所有已被Java解析完毕的class类名称
         */
        List<String> list = sqlGenerator.getAllClasses(packageName);
        /**
         * 循环遍历class类名称列表
         */
        for (String str : list) {
            /**
             * 跳过模板实体
             */
            if(str.indexOf("TableNameTemplateEntity")>-1){
                continue;
            }
            /**
             * 拼接包名目录+实体名称
             */
            className = prefix + str.substring(0, str.lastIndexOf("."));
            /**
             * 调用方法生成建表sql
             */
            String sql = sqlGenerator.generateSql(className, "");
            /**
             * 各表建表sql拼接
             */
            sqls.append(sql);
        }
        /**
         * 导出sql以文本文档形式保存
         */
        filePath = filePath + "CryCreateTableSql.txt";
        /**
         * 操作文件流进行保存sql文件
         */
        sqlGenerator.StringToSql(sqls.toString(), filePath);
        System.out.println("sql已保存！位置为："+filePath.substring(1));
        System.out.println("即将自动打开文件……");
        /**
         * 实例化获取Windows桌面对象
         */
        Desktop desktop = Desktop.getDesktop();
        /**
         * 获取文件对象
         */
        File dirToOpen = new File(filePath);
        /**
         * 打开文件 （如果是文件夹路径会打开资源管理器文件夹，文件会自动打开系统设置的默认文件打开方式）
         */
        desktop.open(dirToOpen);
        System.out.println("文件已打开，请自行操作！");
    }
}
